/*
 * Copyright (C) 2008 Derek James and Philip Tucker
 * 
 * This file is part of ANJI (Another NEAT Java Implementation).
 * 
 * ANJI is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA
 * 
 * created by ptucker
 */
package com.anji.moorph;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;

import org.jgap.Chromosome;

import com.anji.integration.Transcriber;
import com.anji.integration.TranscriberException;
import com.anji.util.Configurable;
import com.anji.util.Properties;

/**
 * @author ptucker
 */
public class ImageTransciber implements Transcriber, Configurable {

  private static final String WIDTH_KEY = "moorph.image.width";

  private static final String HEIGHT_KEY = "moorph.image.height";

  private static final int DEFAULT_WIDTH = 100;

  private static final int DEFAULT_HEIGHT = 100;

  private int width = DEFAULT_WIDTH;

  private int height = DEFAULT_HEIGHT;

  public void init(Properties props) throws Exception {
    width = props.getIntProperty(WIDTH_KEY, DEFAULT_WIDTH);
    height = props.getIntProperty(HEIGHT_KEY, DEFAULT_HEIGHT);
  }

  public Object transcribe(Chromosome c) throws TranscriberException {
    return transcribeImage(c);
  }

  public Image transcribeImage(Chromosome c) throws TranscriberException {
    BufferedImage result = new BufferedImage(
        width, height, BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g = (Graphics2D) result.getGraphics();

    // TODO(ptucker)
    g.drawOval(width / 2, height / 2, width / 10, height / 10);
    
    return result;
  }
}
